import logging
import os
from logging.handlers import RotatingFileHandler
import datetime

# 日志目录
LOG_DIR = os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))), 'logs')

# 确保日志目录存在
if not os.path.exists(LOG_DIR):
    os.makedirs(LOG_DIR)

# 日志文件名
LOG_FILE = os.path.join(LOG_DIR, f'vmi_{datetime.datetime.now().strftime("%Y-%m-%d")}.log')

# 结构化日志格式化器
class StructuredFormatter(logging.Formatter):
    def format(self, record):
        # 基本字段
        log_entry = {
            'timestamp': datetime.datetime.now().isoformat(),
            'level': record.levelname,
            'message': record.getMessage(),
            'module': record.module,
            'function': record.funcName,
            'line': record.lineno
        }
        
        # 添加异常信息（如果有）
        if record.exc_info:
            log_entry['exception'] = self.formatException(record.exc_info)
        
        # 格式化输出
        return f"{log_entry['timestamp']} [{log_entry['level']}] {log_entry['module']}.{log_entry['function']}:{log_entry['line']} - {log_entry['message']}"

# 创建并配置logger
def setup_logger(name='vmi', log_level=logging.INFO):
    logger = logging.getLogger(name)
    logger.setLevel(log_level)
    
    # 避免重复添加handler
    if logger.handlers:
        return logger
    
    # 控制台handler
    console_handler = logging.StreamHandler()
    console_handler.setLevel(log_level)
    console_handler.setFormatter(StructuredFormatter())
    
    # 文件handler（带轮转功能）
    file_handler = RotatingFileHandler(
        LOG_FILE,
        maxBytes=10 * 1024 * 1024,  # 10MB
        backupCount=5,              # 保留5个备份
        encoding='utf-8'
    )
    file_handler.setLevel(log_level)
    file_handler.setFormatter(StructuredFormatter())
    
    # 添加handler
    logger.addHandler(console_handler)
    logger.addHandler(file_handler)
    
    return logger

# 创建默认logger
logger = setup_logger()